<!DOCTYPE html>
<html lang="zh-cn"><head>
    <meta charset="utf-8">
    <meta name="viewport" content="width=device-width, initial-scale=1">

    
    <link href="/css/bootstrap.min.css" rel="stylesheet">
    <link href="/css/main.css" rel="stylesheet">

    <link rel="shortcut icon" type="image/x-icon" href="/img/favicon.ico" />

    <title>Go程序的字符串 | wiseAI的小站</title>
</head><body><div class="container-fluid">
    <nav class="navbar fixed-top navbar-expand-sm navbar-dark bg-dark">
        <div class="container-fluid">
            <a class="navbar-brand" href="/">
                <img src="/img/favicon.ico" alt="" width="30" height="24" class="d-inline-block align-text-top">
                wiseAI的小站
            </a>
            <button class="navbar-toggler" type="button" data-bs-toggle="collapse" data-bs-target="#navbarSupportedContent" aria-controls="navbarSupportedContent" aria-expanded="false" aria-label="Toggle navigation">
                <span class="navbar-toggler-icon"></span>
            </button>
            <div class="collapse navbar-collapse" id="navbarSupportedContent">
                <ul class="navbar-nav me-auto mb-2 mb-lg-0">
                    
                    <li class="nav-item">
                        <a  class="nav-link"   href="/articles/">文章</a>
                    </li>
                    
                    <li class="nav-item">
                        <a  class="nav-link"   href="/categories/">分类</a>
                    </li>
                    
                    <li class="nav-item">
                        <a  class="nav-link"   href="/tags/">关键字</a>
                    </li>
                    
                    <li class="nav-item">
                        <a  class="nav-link"   href="/post/golang/">golang编程</a>
                    </li>
                    
                    <li class="nav-item">
                        <a  class="nav-link"   href="/about/">关于</a>
                    </li>
                    
                </ul>
                <form class="d-flex">
                    <input id="search-query" class="form-control me-2" type="search" placeholder="Search for anything..." aria-label="Search">
                </form>
            </div>
        </div>
    </nav>
</div>




<div id="content">
<div class="container article">
	<h1>Go程序的字符串</h1>
	<div class="post-meta">
		<div>
			
			
			By wiseai | 2022-06-30 | 1 minutes
		</div>
		<div class="tags">
			
			<a class="btn btn-light links btn-sm" href="/tags/%E7%BC%96%E7%A8%8B/">编程</a>
			
		</div>
	</div>
	<div>
		<div class="article-post">
			<h1 id="46-字符串">4.6 字符串</h1>
<p>字符串是 UTF-8 字符的一个序列（当字符为 ASCII 码时则占用 1 个字节，其它字符根据需要占用 2-4 个字节）。UTF-8 是被广泛使用的编码格式，是文本文件的标准编码，其它包括 XML 和 JSON 在内，也都使用该编码。由于该编码对占用字节长度的不定性，Go 中的字符串里面的字符也可能根据需要占用 1 至 4 个字节，这与其它语言如 C++、Java 或者 Python 不同（Java 始终使用 2 个字节）。Go 这样做的好处是不仅减少了内存和硬盘空间占用，同时也不用像其它语言那样需要对使用 UTF-8 字符集的文本进行编码和解码。</p>
<p>字符串是一种值类型，且值不可变，即创建某个文本后你无法再次修改这个文本的内容；更深入地讲，字符串是字节的定长数组。</p>
<p>Go 支持以下 2 种形式的字面值：</p>
<ul>
<li>
<p>解释字符串：</p>
<p>该类字符串使用双引号括起来，其中的相关的转义字符将被替换，这些转义字符包括：</p>
<ul>
<li><code>\n</code>：换行符</li>
<li><code>\r</code>：回车符</li>
<li><code>\t</code>：tab 键</li>
<li><code>\u</code> 或 <code>\U</code>：Unicode 字符</li>
<li><code>\\</code>：反斜杠自身</li>
</ul>
</li>
<li>
<p>非解释字符串：</p>
<p>该类字符串使用反引号括起来，支持换行，例如：</p>
<pre><code>  `This is a raw string \n` 中的 `\n\` 会被原样输出。
</code></pre>
</li>
</ul>
<p>和 C/C++不一样，Go 中的字符串是根据长度限定，而非特殊字符 <code>\0</code>。</p>
<p><code>string</code> 类型的零值为长度为零的字符串，即空字符串 <code>&quot;&quot;</code>。</p>
<p>一般的比较运算符（<code>==</code>、<code>!=</code>、<code>&lt;</code>、<code>&lt;=</code>、<code>&gt;=</code>、<code>&gt;</code>）通过在内存中按字节比较来实现字符串的对比。你可以通过函数 <code>len()</code> 来获取字符串所占的字节长度，例如：<code>len(str)</code>。</p>
<p>字符串的内容（纯字节）可以通过标准索引法来获取，在中括号 <code>[]</code> 内写入索引，索引从 0 开始计数：</p>
<ul>
<li>字符串 <code>str</code> 的第 1 个字节：<code>str[0]</code></li>
<li>第 <code>i</code> 个字节：<code>str[i - 1]</code></li>
<li>最后 1 个字节：<code>str[len(str)-1]</code></li>
</ul>
<p>需要注意的是，这种转换方案只对纯 ASCII 码的字符串有效。</p>
<p><u><strong>注意事项</strong> 获取字符串中某个字节的地址的行为是非法的，例如：<code>&amp;str[i]</code>。</u></p>
<p><strong>字符串拼接符 <code>+</code></strong></p>
<p>两个字符串 <code>s1</code> 和 <code>s2</code> 可以通过 <code>s := s1 + s2</code> 拼接在一起。</p>
<p><code>s2</code> 追加在 <code>s1</code> 尾部并生成一个新的字符串 <code>s</code>。</p>
<p>你可以通过以下方式来对代码中多行的字符串进行拼接：</p>
<pre tabindex="0"><code>str := &#34;Beginning of the string &#34; +
	&#34;second part of the string&#34;
</code></pre><p><u>由于编译器行尾自动补全分号的缘故，加号 <code>+</code> 必须放在第一行。</u></p>
<p>拼接的简写形式 <code>+=</code> 也可以用于字符串：</p>
<pre tabindex="0"><code>s := &#34;hel&#34; + &#34;lo,&#34;
s += &#34;world!&#34;
fmt.Println(s) //输出 “hello, world!”
</code></pre><p><strong>下面这些后面文章添加了再修改</strong></p>
<p>在循环中使用加号 <code>+</code> 拼接字符串并不是最高效的做法，更好的办法是使用函数 <code>strings.Join()</code>（<a href="/post/golang/2022.07.01-strings%E5%92%8Cstrconv%E5%8C%85/">第 4.7.10 节</a>），有没有更好的办法了？有！使用字节缓冲（<code>bytes.Buffer</code>）拼接更加给力（<a href="07.2.md">第 7.2.6 节</a>）！</p>
<p>在<a href="07.0.md">第 7 章</a>，我们会讲到通过将字符串看作是字节 (<code>byte</code>) 的切片 (slice) 来实现对其标准索引法的操作。会在<a href="05.4.md">第 5.4.1 节</a> 中讲到的 <code>for</code> 循环只会根据索引返回字符串中的纯字节，而在<a href="./05.4.md">第 5.4.4 节</a>（以及<a href="07.6.md">第 7.6.1 节</a> 的示例）将会展示如何使用 for-range 循环来实现对 Unicode 字符串的迭代操作。在下一节，我们会学习到许多有关字符串操作的函数和方法，同时 <code>fmt</code> 包中的 <code>fmt.Sprint(x)</code> 也可以格式化生成并返回你所需要的字符串（<a href="04.3.md">第 4.4.3 节</a>）。</p>
<p><strong>练习 4.6</strong> <a href="exercises/chapter_4/count_characters.go">count_characters.go</a></p>
<p>创建一个用于统计字节和字符 (rune) 的程序，并对字符串 <code>asSASA ddd dsjkdsjs dk</code> 进行分析，然后再分析 <code>asSASA ddd dsjkdsjsこん dk</code>，最后解释两者不同的原因（提示：使用 <code>unicode/utf8</code> 包）。</p>

		</div>
	</div>
</div>


<div class="container">
    
    <div class="row">
        
        <div class="col-5">
            <a class="page-link link-dark text-end dh" href="/post/golang/2022.06.29-%E5%9F%BA%E6%9C%AC%E7%B1%BB%E5%9E%8B%E5%92%8C%E8%BF%90%E7%AE%97%E7%AC%A6/">
                <h5>前一篇</h5><br>
                Go程序的基本类型和运算符
            </a>            
        </div>
        
        <div class="col-2">
        </div>
        
        <div class="col-5">
            <a class="page-link link-dark text-start dh" href="/post/golang/2022.07.01-strings%E5%92%8Cstrconv%E5%8C%85/">
                <h5>后一篇</h5><br>
                Go程序的 Strings 和 strconv 包
            </a>            
        </div>
        
    </div>
    
</div>

        </div><br><br>
<footer class="container">
    <h2>友情链接</h2>
    <hr>
    <nav class="nav nav-pills flex-column flex-sm-row">
        
        <a class="flex-sm-fill text-sm-center nav-link links link-dark" href="https://wiseai.gitee.io/pages/gnzg/index.html" target="_blank">孤鸟之歌</a>
        
        <a class="flex-sm-fill text-sm-center nav-link links link-dark" href="https://wiseai.gitee.io/pages/mm/index.html" target="_blank">生成随机字符</a>
        
        <a class="flex-sm-fill text-sm-center nav-link links link-dark" href="https://wiseai.gitee.io/pages/md/index.html" target="_blank">MarkDown</a>
        
        <a class="flex-sm-fill text-sm-center nav-link links link-dark" href="https://gitee.com/" target="_blank">Gitee</a>
        
        <a class="flex-sm-fill text-sm-center nav-link links link-dark" href="https://github.com/" target="_blank">Github</a>
        
        <a class="flex-sm-fill text-sm-center nav-link links link-dark" href="https://www.aliyun.com/" target="_blank">阿里云</a>
        
        <a class="flex-sm-fill text-sm-center nav-link links link-dark" href="https://cloud.tencent.com/" target="_blank">腾讯云</a>
        
        <a class="flex-sm-fill text-sm-center nav-link links link-dark" href="https://www.oschina.net/" target="_blank">OSCHINA开源中国</a>
        
        <a class="flex-sm-fill text-sm-center nav-link links link-dark" href="https://gitee.com/wiseai/the-way-to-go_ZH_CN/blob/master/eBook/directory.md" target="_blank">the way to go</a>
        
        <a class="flex-sm-fill text-sm-center nav-link links link-dark" href="https://topgoer.com/" target="_blank">golang文档</a>
        
        <a class="flex-sm-fill text-sm-center nav-link links link-dark" href="https://goframe.org/display/gf" target="_blank">GoFrame</a>
        
        <a class="flex-sm-fill text-sm-center nav-link links link-dark" href="https://www.aliyundrive.com/" target="_blank">阿里云盘</a>
        
        <a class="flex-sm-fill text-sm-center nav-link links link-dark" href="https://cn.vuejs.org/" target="_blank">vue3文档</a>
        
        <a class="flex-sm-fill text-sm-center nav-link links link-dark" href="https://element-plus.gitee.io/zh-CN/" target="_blank">element-plus文档</a>
        
        <a class="flex-sm-fill text-sm-center nav-link links link-dark" href="https://www.runoob.com/vue3/vue3-tutorial.html" target="_blank">vue3菜鸟教程</a>
        
        <a class="flex-sm-fill text-sm-center nav-link links link-dark" href="https://v5.bootcss.com/" target="_blank">bootstrap v5 中文文档</a>
        
        <a class="flex-sm-fill text-sm-center nav-link links link-dark" href="https://www.bootstrap.cn/" target="_blank">bootstrap文档</a>
        
        <a class="flex-sm-fill text-sm-center nav-link links link-dark" href="https://caddy2.dengxiaolong.com/docs/" target="_blank">caddy中文教程</a>
        
        <a class="flex-sm-fill text-sm-center nav-link links link-dark" href="https://www.58pic.com/" target="_blank">千图</a>
        
        <a class="flex-sm-fill text-sm-center nav-link links link-dark" href="https://ifonts.com/" target="_blank">iFonts</a>
        
        <a class="flex-sm-fill text-sm-center nav-link links link-dark" href="https://marketing.qiniu.com/" target="_blank">七牛云</a>
        
        <a class="flex-sm-fill text-sm-center nav-link links link-dark" href="https://www.ixigua.com/" target="_blank">西瓜视频</a>
        
        <a class="flex-sm-fill text-sm-center nav-link links link-dark" href="https://wiseai.gitee.io/pages/yugang/index.html" target="_blank">鱼缸计算</a>
        
        <a class="flex-sm-fill text-sm-center nav-link links link-dark" href="https://justcc.mengkang.net/#/" target="_blank">C语言JustCC</a>
        
        <a class="flex-sm-fill text-sm-center nav-link links link-dark" href="https://wiseai.gitee.io/pages/pptist/" target="_blank">PPTist</a>
        
        <a class="flex-sm-fill text-sm-center nav-link links link-dark" href="/index.xml" target="_blank">RSS</a>
        
        <a class="flex-sm-fill text-sm-center nav-link links link-dark" href="https://www.kancloud.cn/idcpj/python/418553" target="_blank">参考资料</a>
        
    </nav>

    <div class="copyright text-center">
      <span class="power-by">
        Powered by <a class="links" href="https://gohugo.io" target="_blank">Hugo</a>
    </span>
    <span>|</span>
    <span>
        Theme - <a class="links" href="https://github.com/wiseai-go/blog-hugo" target="_blank">WiseAI</a>
    </span>
    <br>
    <span class="copyright-year">
        &copy;
        
        2017 -
        2023<span>
            陇ICP备15000157号
            
        </span></span>

</div>
</footer>
<script src="/js/bootstrap.bundle.min.js"></script>


</body>
</html>
